package alex;

import java.io.File;

public class FileUtils {
	
	private static final boolean DEBUG = false;
	
	/**
	 * 移動指定文件夾內的全部文件
	 * @param from	要移動的文件目錄
	 * @param to	目標文件目錄
	 * @throws Exception
	 */
	public static void fileMove(String from, String to) throws Exception {
		try {
			File dir = new File(from);	// 文件一覽
			File[] files = dir.listFiles();
			if (files == null){
				return;
			}
			
			// 目標
			File moveDir = new File(to);
			if (!moveDir.exists()) {
				moveDir.mkdirs();
			}
			// 文件移動
			for (int i = 0; i < files.length; i++) {
				String oriPath = files[i].getPath();
				String distPath =  to + files[i].getName();
				if (files[i].isDirectory()) {
					fileMove(oriPath, distPath);  //call by self
					if(DEBUG){
						System.out.println("複製目錄:"+oriPath+" -> "+distPath);
					}
					
					// 成功，刪除原文件
					files[i].delete();
					if(DEBUG){
						System.out.println("刪除原目錄"+files[i]);
					}
				}
				File moveFile = new File(moveDir.getPath() +"\\"+ files[i].getName());
				// 目標文件夾下存在的話，刪除
				if (moveFile.exists()) {
					moveFile.delete();
				}
				files[i].renameTo(moveFile);
				if(DEBUG){
					System.out.println("複製檔案:"+files[i]+" -> "+moveFile);
				}
				files[i].delete();
				if(DEBUG){
					System.out.println("刪除原檔案"+files[i]);
				}
				
			}
		} catch (Exception e) {
			System.out.println("移動檔案有錯誤:"+e.getMessage());
		}
	}
	
	/**  
	* 移動目錄  
	* @param srcDirName     源目錄完整路徑 
	* @param destDirName    目的目錄完整路徑 
	* @return 目錄移動成功返回true，否則返回false  
	*/    
	public static boolean moveDirectory(String srcDirName, String destDirName) {  
	      
	    File srcDir = new File(srcDirName);  
	    if(!srcDir.exists() || !srcDir.isDirectory())    
	        return false;    
	     
	   File destDir = new File(destDirName);  
	   if(!destDir.exists())  
	       destDir.mkdirs();  
	     
	   /** 
	    * 如果是文件則移動，否則遞歸移動文件夾。刪除最終的空源文件夾 
	    * 注意移動文件夾時保持文件夾的樹狀結構 
	    */  
	   File[] sourceFiles = srcDir.listFiles();  
	   for (File sourceFile : sourceFiles) {  
	       if (sourceFile.isFile())  
	           moveFile(sourceFile.getAbsolutePath(), destDir.getAbsolutePath());  
	       else if (sourceFile.isDirectory())  
	           moveDirectory(sourceFile.getAbsolutePath(),   
	                   destDir.getAbsolutePath() + File.separator + sourceFile.getName());  
	       else  
	           ;  
	   }  
	   return srcDir.delete();  
	} 
	
	/**  
	* 移動文件  
	* @param srcFileName    源文件完整路徑 
	* @param destDirName    目的目錄完整路徑 
	* @return 文件移動成功返回true，否則返回false  
	*/    
	public static boolean moveFile(String srcFileName, String destDirName) {  
	      
	    File srcFile = new File(srcFileName);  
	    if(!srcFile.exists() || !srcFile.isFile())   
	        return false;  
	      
	    File destDir = new File(destDirName);  
	    if (!destDir.exists())  
	        destDir.mkdirs();  
	      
	    return srcFile.renameTo(new File(destDirName + File.separator + srcFile.getName()));  
	}  
	
}
